#include "mylabel.h"
#include <QDebug>
#include <QMouseEvent>

myLabel::myLabel(QWidget *parent) : QLabel(parent)
{
    // 设置鼠标的追踪状态，默认为false
    // 含义：只要鼠标进入标签区域，不需要按下按钮，就会触发mouseMoveEvent事件
    setMouseTracking(true);
}

void myLabel::enterEvent(QEvent *event)
{
    qDebug() << "鼠标进入了";
}

void myLabel::leaveEvent(QEvent *event)
{
    qDebug() << "鼠标离开了";
}

void myLabel::mousePressEvent(QMouseEvent *ev)
{
    // ev->x() ev->y() 是基于标签的，标签的左上角为 0,0
    // ev->globalX() ev->globalY() 是基于屏幕的，注意不是基于最外层窗体的

    // 鼠标左键时才触发
    if (ev->button() == Qt::LeftButton) {
        QString str = QString("鼠标按下了, x=%1, y=%2, globalX=%3, globalY=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
        qDebug() << str;
    }
}

void myLabel::mouseReleaseEvent(QMouseEvent *ev)
{
    // 鼠标左键时才触发
    if (ev->button() == Qt::LeftButton) {
        QString str = QString("鼠标释放了, x=%1, y=%2, globalX=%3, globalY=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
        qDebug() << str;
    }
}

void myLabel::mouseMoveEvent(QMouseEvent *ev)
{
    // 鼠标左键时才触发
//    if (ev->button() == Qt::LeftButton) {
    // 移动是一个状态，和按下和释放不同
    // 需要使用ev->buttons() 并且使用 & 来判断
//    if (ev->buttons() & Qt::LeftButton) { // 如果设置事件追踪，应该把这个判断去掉。
        QString str = QString("鼠标移动了, x=%1, y=%2, globalX=%3, globalY=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
        qDebug() << str;
//    }
}
